import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from "axios";
import { notification } from "ant-design-vue";

import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/reset.css';
import * as Icons from '@ant-design/icons-vue';

const app = createApp(App);
app.use(Antd).use(store).use(router).mount('#app')

const icons = Icons;
for(const i in icons){
    app.component(i,icons[i]);
}

/**
 * axios interceptors /ˌɪn təˈsɛ p tə z/拦截器
 * 一个方法两个回调函数，一个是调用之前，一个是调用失败
 * 拦截请求
 */
  axios.interceptors.request.use(function (config) {
    console.log('请求参数：', config);
    // 从当前session里面拿到token
    const _token = store.state.member.token;
    // 如果有token，就加入到headers头里面，再发请求
    if (_token) {
      config.headers.token = _token;
      console.log("请求headers增加token:", _token);
    }
    return config;
  }, error => {
    return Promise.reject(error);
  });

  // 拦截返回结果，一个方法两个回调函数，一个是调用成功，一个是调用失败
  axios.interceptors.response.use(function (response) {
    console.log('返回结果：', response);
    return response;
  }, error => {
    console.log('返回错误：', error);
    // 拿到返回结果的错误信息
    const response = error.response;
    // 拿到返回的状态码
    const status = response.status;
    console.log('返回错误码：', status);
    // 判断状态码如果是401 跳转到登录页
    if (status === 401) {
      console.log("未登录或登录超时，跳到登录页");
      // 清除 session 里面的数据，因空指针问题同样不能直接给空，而是给空对象
      store.commit("setMember", {});
      notification.error({ description: "未登录或登录超时" });
      // 跳转到登录页面
      router.push('/login');
    }
    return Promise.reject(error);
  });

  // 设置基础的 URL ，axios的所有请求都会加上这个基础 url
  axios.defaults.baseURL = process.env.VUE_APP_SERVER;

  console.log('环境：', process.env.NODE_ENV);
  console.log('服务端：', process.env.VUE_APP_SERVER);
  